我自己並不覺得 FP 跟 OOP 有優劣之分,只要邏輯簡單易懂,都是很好的做法 。
我在學習 TDD 開發的過程中,偶然間接觸到 FP ,由於以前都是偏物件導向的方式去寫,所以就停下來稍微研究了一下 FP ,那這邊會稍微介紹一下 FP 的做法
y = f(x)
這是一個我們熟悉的方程式,那 FP 也是以這個為基礎,一個 input 只會有一個 output,且不會有side Effect ,而且不會有外部影響 ,我們就稱之為 Pure Function,舉例來說
y = f(x + 5)
const pureFunctionAddFive = (x) => {
return x + 5
}
pureFunctionAddFive(5); // 10
pureFunctionAddFive(10); // 15
什麼是Side Effects ?
如果有使用到 function scope 以外的狀態,那就是有可能產生 side effects
(常用到的 console 、 new Date()、或是變動原本的數值都算是 side Effect )
舉例來說,這邊有使用到外部的變數,他就算是side effect ,也就代表他不是 pure function
let value = 5 ;
function addingValue (n : number) {
return n + value;
}
首先我們先看一題前端面試題,這題應該蠻常看到的,我們要怎麼做出這個 sum function 呢
let a = 1 ;
let b = 2 ;
sum(a)(b) // 3
//answer
function sum(a){
return function(b){
return a + b
};
}
通過 currying 的方式你可以這樣用
const sumByOne = sum(1)
sumByOne(2); //3
sumByOne(5); //6
通過 curry 的方式可以讓你更容易寫出 pure function ,也會讓程式變得更容易測試